import com.mj.entity.Book;
import com.mj.entity.User;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Date;
import java.util.Map;
import java.util.Set;

public class Show {
    @Test
    public void tone() {
        BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext.xml");
        //System.out.println(bf);
        // Date date1 = bf.getBean(Date.class);//获取类，不需要new了，beans.xml就相当于是一个工厂，只需要用就是了，不需要每次new
        //Date date2 = bf.getBean("date",Date.class);//这里的date1和date2是同一个对象，不像之前每次都new一下，实例化
        //System.out.println(date1);
        //System.out.println(date2);
        //Book book = bf.getBean(Book.class);
        //book.setId(1);
        //book.setName("沉默是金");
        //book.setPrice(111);
        //System.out.println(book);
        //System.out.println(book.getName());
        /*Book b1 = bf.getBean("book", Book.class);//由于beans里面有两个book类，所以需要使用名字进行区分，否则会分不清导致报错
        System.out.println(b1.getId());//0
        System.out.println(b1.getName());
        System.out.println(b1.getPrice());//0
        System.out.println(b1.getDate());//null
        Book b2 = bf.getBean("book2", Book.class);
        System.out.println(b2.getId());
        System.out.println(b2.getName());
        System.out.println(b2.getPrice());//0
        System.out.println(b2.getDate());//null*/
        //Book b1 = bf.getBean("book3",Book.class);
        //Book b2 = bf.getBean("book3",Book.class);
        //Book b3 = bf.getBean("book3",Book.class);
        //Book b4 = bf.getBean("book3",Book.class);
        //System.out.println(b1==b2);
        //System.out.println(b2==b3);
        //System.out.println(b1==b3);
        //System.out.println(b1.getId());
        //System.out.println(b2.getName());
        //System.out.println(b3.getPrice());
        //System.out.println(b4.getDate());
        //这里的三个对象是不一样的，打印的都是false，因为每调一次，beans内部都会new一次，这就是多实例的结果
        //但是三个对象获取的都是同一个类下面的值，结果是正常的
        /*for (String ad : b3.getAddress()){
            System.out.println(ad);
        }*/
        //Book bkb = bf.getBean("book3",Book.class);
        //System.out.println(bkb.getUser().getUname());//通过获取工厂里面的user属性，user属性已经关联了user类，在获取name
        //System.out.println(bkb.getMap());//获取map
        //System.out.println(bkb.getMap().get("k1"));//获取键值
        //System.out.println(bkb.getMap().get("k2"));
        //System.out.println(bkb.getProperties());
        //System.out.println(bkb.getProperties().get("p1"));//获取属性列表内的值，和map比较类似，可以用get也可以用getproperty，结果是一样的
        //System.out.println(bkb.getProperties().getProperty("p1"));//但是get只会在map列表内搜索，而getproperty是在属性列表内搜索，优先键值
       /* System.out.println(bkb.getSet());
        for (Object o : bkb.getSet()){//遍历set集合
            System.out.println(o);
        }*/
    }
}
